﻿CREATE PROCEDURE [dbo].[Hogar_Integrante_Actualizar]   
	@IntegranteAsXml Xml
AS 
BEGIN

/*****************************************************************************************************************************************/
-- Author: Carlos Mendoza
-- Purpose:   actualiza un integrante
/*****************************************************************************************************************************************/ 

DECLARE @IntegranteId INT
DECLARE @ActividadId INT

BEGIN TRY
    BEGIN TRAN 
    
		SELECT @IntegranteId = DatosIntegrante.Integrante.query('./IntegranteId').value('.','INT')
		FROM @IntegranteAsXml.nodes('/DatosIntegrante/Integrante') AS DatosIntegrante(Integrante)
		
		UPDATE [dbo].[Integrante]
		SET [Dni] = DatosIntegrante.Integrante.query('./Dni').value('.','VARCHAR(10)')
		,[Nombre] = DatosIntegrante.Integrante.query('./Nombre').value('.','VARCHAR(50)')
		,[Apellido] = DatosIntegrante.Integrante.query('./Apellido').value('.','VARCHAR(50)')
		,[TipoDocumentoId] = DatosIntegrante.Integrante.query('./TipoDocumentoId').value('.','INT')
		,[FechaNacimiento] = DatosIntegrante.Integrante.query('./FechaNacimiento').value('.','DATE')
		,[Domicilio] = DatosIntegrante.Integrante.query('./Domicilio').value('.','VARCHAR(100)')
		,[Telefono] = DatosIntegrante.Integrante.query('./Telefono').value('.','VARCHAR(50)')
		,[EstadoCivilId] = DatosIntegrante.Integrante.query('./EstadoCivilId').value('.','INT')
		,[NivelEstudioId] = DatosIntegrante.Integrante.query('./NivelEstudioId').value('.','INT')
		,[NivelEstudioCompleto] = DatosIntegrante.Integrante.query('./NivelEstudioCompleto').value('.','BIT')
		,[PropiedadViviendaId] = DatosIntegrante.Integrante.query('./PropiedadViviendaId').value('.','INT')
		,[BeneficioPrevisionalId] = DatosIntegrante.Integrante.query('./BeneficioPrevisionalId').value('.','INT')
		,[Monto] = CAST(NULLIF(DatosIntegrante.Integrante.query('./Monto').value('.','VARCHAR(8)'),'') as DECIMAL(10,2))
		,[ObraSocialId] = CAST(NULLIF(DatosIntegrante.Integrante.query('./ObraSocialId').value('.','INT'),'') as INT)
		,[NroAfiliado] = DatosIntegrante.Integrante.query('./NroAfiliado').value('.','BIGINT')
		,[ServicioEmergenciaId] = CAST(NULLIF(DatosIntegrante.Integrante.query('./ServicioEmergenciaId').value('.','INT'),'') as INT)
		,[CuotaCooperadora] = CAST(NULLIF(DatosIntegrante.Integrante.query('./CuotaCooperadora').value('.','VARCHAR(8)'),'') as DECIMAL(10,2))
		,[Entrevista] = DatosIntegrante.Integrante.query('./Entrevista').value('.','VARCHAR(MAX)')
        FROM @IntegranteAsXml.nodes('/DatosIntegrante/Integrante') AS DatosIntegrante(Integrante)
		WHERE [IntegranteId] = @IntegranteId
		
		----------------------------------------------------------------------------------------------

		SELECT TOP 1 @ActividadId = AsisteDias.AsisteComedorViandaDias.query('./ActividadId').value('.','INT')
		FROM @IntegranteAsXml.nodes('/DatosIntegrante/AsisteDias/AsisteComedorViandaDias') AS AsisteDias(AsisteComedorViandaDias)
		
		IF (@ActividadId IS NOT NULL)
		BEGIN
			IF (@ActividadId = 1) --Comedor
			BEGIN
				UPDATE [dbo].[Inscripcion]
				SET [Activa] = 0, [FechaBaja] = GETDATE()
				WHERE [ActividadId] = 2 AND [IntegranteId] = @IntegranteId AND [Activa] = 1

				IF (NOT EXISTS(SELECT 1 
							   FROM [dbo].[Inscripcion] WITH (NOLOCK)
							   WHERE [IntegranteId] = @IntegranteId AND [ActividadId] = 1 AND [Activa] = 1))
				BEGIN
					INSERT INTO [dbo].[Inscripcion]
					   ([IntegranteId]
					   ,[ActividadId]
					   ,[Activa]
					   ,[FechaInscripcion]
					   ,[FechaBaja])
					VALUES (@IntegranteId, 1, 1, GETDATE(), NULL)
				END
			END
			ELSE --Vianda
			BEGIN
				UPDATE [dbo].[Inscripcion]
				SET [Activa] = 0, [FechaBaja] = GETDATE()
				WHERE [ActividadId] = 1 AND [IntegranteId] = @IntegranteId AND [Activa] = 1

				IF (NOT EXISTS(SELECT 1 
							   FROM [dbo].[Inscripcion] WITH (NOLOCK)
							   WHERE [IntegranteId] = @IntegranteId AND [ActividadId] = 2 AND [Activa] = 1))
				BEGIN
					INSERT INTO [dbo].[Inscripcion]
					   ([IntegranteId]
					   ,[ActividadId]
					   ,[Activa]
					   ,[FechaInscripcion]
					   ,[FechaBaja])
					VALUES (@IntegranteId, 2, 1, GETDATE(), NULL)
				END
			END
		END


		DELETE FROM [dbo].[AsisteComedorViandaDias]
		WHERE [IntegranteId] = @IntegranteId
		IF (@ActividadId IS NOT NULL)
		BEGIN
			INSERT INTO [dbo].[AsisteComedorViandaDias]
			   ([IntegranteId]
			   ,[ActividadId]
			   ,[DiaSemanaId])
			SELECT
				@IntegranteId,
				AsisteDias.AsisteComedorViandaDias.query('./ActividadId').value('.','INT'),
				AsisteDias.AsisteComedorViandaDias.query('./DiaSemanaId').value('.','INT')
			FROM @IntegranteAsXml.nodes('/DatosIntegrante/AsisteDias/AsisteComedorViandaDias') AS AsisteDias(AsisteComedorViandaDias)
		END
		ELSE
		BEGIN
			--Se dio de baja al servicio de alimentacion
			UPDATE [dbo].[Inscripcion]
			SET [Activa] = 0, [FechaBaja] = GETDATE()
			WHERE ([ActividadId] = 1 OR [ActividadId] = 2) AND [IntegranteId] = @IntegranteId AND [Activa] = 1
		END
		-----------------------------------------------------------------------------------------------------
		DELETE FROM [dbo].[PersonaReferencia]
		WHERE [IntegranteId] = @IntegranteId
		
		INSERT INTO [dbo].[PersonaReferencia]
           ([IntegranteId]
           ,[Nombre]
           ,[Apellido]
           ,[Telefono]
           ,[Edad]
           ,[TipoPersonaReferenciaId]
           ,[VinculoId])
        SELECT
			@IntegranteId,
			GrupoConvivencia.PersonaReferencia.query('./Nombre').value('.','VARCHAR(50)'),
			GrupoConvivencia.PersonaReferencia.query('./Apellido').value('.','VARCHAR(50)'),
			GrupoConvivencia.PersonaReferencia.query('./Telefono').value('.','VARCHAR(50)'),
			CAST(NULLIF(GrupoConvivencia.PersonaReferencia.query('./Edad').value('.','INT'),'') as INT),
			GrupoConvivencia.PersonaReferencia.query('./TipoPersonaReferenciaId').value('.','INT'),
			GrupoConvivencia.PersonaReferencia.query('./VinculoId').value('.','INT')
        FROM @IntegranteAsXml.nodes('/DatosIntegrante/GrupoConvivencia/PersonaReferencia') AS GrupoConvivencia(PersonaReferencia)
        
        INSERT INTO [dbo].[PersonaReferencia]
           ([IntegranteId]
           ,[Nombre]
           ,[Apellido]
           ,[Telefono]
           ,[Edad]
           ,[TipoPersonaReferenciaId]
           ,[VinculoId])
        SELECT
			@IntegranteId,
			GrupoFamiliar.PersonaReferencia.query('./Nombre').value('.','VARCHAR(50)'),
			GrupoFamiliar.PersonaReferencia.query('./Apellido').value('.','VARCHAR(50)'),
			GrupoFamiliar.PersonaReferencia.query('./Telefono').value('.','VARCHAR(50)'),
			CAST(NULLIF(GrupoFamiliar.PersonaReferencia.query('./Edad').value('.','INT'),'') as INT),
			GrupoFamiliar.PersonaReferencia.query('./TipoPersonaReferenciaId').value('.','INT'),
			GrupoFamiliar.PersonaReferencia.query('./VinculoId').value('.','INT')
        FROM @IntegranteAsXml.nodes('/DatosIntegrante/GrupoFamiliar/PersonaReferencia') AS GrupoFamiliar(PersonaReferencia)
        
        INSERT INTO [dbo].[PersonaReferencia]
           ([IntegranteId]
           ,[Nombre]
           ,[Apellido]
           ,[Telefono]
           ,[Edad]
           ,[TipoPersonaReferenciaId]
           ,[VinculoId])
        SELECT
			@IntegranteId,
			PersonasCasoEmergencia.PersonaReferencia.query('./Nombre').value('.','VARCHAR(50)'),
			PersonasCasoEmergencia.PersonaReferencia.query('./Apellido').value('.','VARCHAR(50)'),
			PersonasCasoEmergencia.PersonaReferencia.query('./Telefono').value('.','VARCHAR(50)'),
			CAST(NULLIF(PersonasCasoEmergencia.PersonaReferencia.query('./Edad').value('.','INT'),'') as INT),
			PersonasCasoEmergencia.PersonaReferencia.query('./TipoPersonaReferenciaId').value('.','INT'),
			PersonasCasoEmergencia.PersonaReferencia.query('./VinculoId').value('.','INT')
        FROM @IntegranteAsXml.nodes('/DatosIntegrante/PersonasCasoEmergencia/PersonaReferencia') AS PersonasCasoEmergencia(PersonaReferencia)
		
		--------------------------------------------------------------------------------------------------
		
		DELETE FROM [dbo].[Inscripcion]
		WHERE [IntegranteId] = @IntegranteId AND [Activa] = 1 AND [ActividadId] > 2
	
		--Inserto las nuevas inscripciones (con fecha insc nueva)
		INSERT INTO [dbo].[Inscripcion]
           ([IntegranteId]
           ,[ActividadId]
		   ,[Activa]
		   ,[FechaInscripcion]
		   ,[FechaBaja])
        SELECT @IntegranteId,
			InscripcionTalleres.ConsultaInscripcion.query('./ActividadId').value('.','INT'),
			InscripcionTalleres.ConsultaInscripcion.query('./Activa').value('.','BIT'),
			InscripcionTalleres.ConsultaInscripcion.query('./FechaInscripcion').value('.','DATE'),
			CAST(NULLIF(InscripcionTalleres.ConsultaInscripcion.query('./FechaBaja').value('.','DATE'),'') AS DATE)
        FROM @IntegranteAsXml.nodes('/DatosIntegrante/InscripcionTalleres/ConsultaInscripcion') AS InscripcionTalleres(ConsultaInscripcion)
       
    COMMIT TRAN
END TRY
BEGIN CATCH
	SELECT ERROR_NUMBER() AS Number,
		ERROR_MESSAGE() AS Message
	ROLLBACK TRAN
	
END CATCH

END